<template>
  <el-card shadow="always" :body-style="{ padding: '20px' }">
    <div slot="header">基本资料</div>
    <!-- 内容 -->
    <el-form
      :model="userInfo"
      ref="fm"
      :rules="userFormRules"
      label-width="100px"
    >
      <el-form-item label="登录名称">
        <el-input v-model="userInfo.username" disabled></el-input>
      </el-form-item>
      <el-form-item label="用户昵称" prop="nickname">
        <el-input
          v-model="userInfo.nickname"
          minlength="1"
          maxlength="10"
        ></el-input>
      </el-form-item>
      <el-form-item label="用户邮箱" prop="email">
        <el-input v-model="userInfo.email"></el-input>
      </el-form-item>

      <!-- 操作 -->
      <el-form-item>
        <el-button type="primary" @click="updateUser">立即创建</el-button>
        <el-button @click="reset">重置</el-button>
      </el-form-item>
    </el-form>

    <!-- card body -->
  </el-card>
</template>

<script>
import { updateUserInfoApi } from '@/api/user'
export default {
  data () {
    return {
      // 表单数据
      // userInfo: {
      //   // 用户名不能该
      //   // username: this.$store.state.Lgin.userInfo,
      //   username: '',
      //   // 昵称
      //   nickname: '',
      //   // 邮箱
      //   email: ''

      // },
      userInfo: {},
      /**
       * 用户信息修改， 在原有用户信息基础上
       * 思考：为什么 刷新之后之前存在vuex 的数据获取不到了？
       * 或用获取数据=》 发请求获取的。是异步的，组件赋值是vuex 的默认值
       *  所以此方法不行 userInfo: this.$store.state.Lgin.userInfo,
       * 那思考2  ：怎么获取后者监控数据得变化 干事儿 =》使用watch监听vuex数据的变化
       *
       *
       *
       * */

      // 校验规则
      userFormRules: {
        nickname: [
          { required: true, message: '请输入用户昵称', trigger: 'blur' },
          { pattern: /^\S{2,10}$/, message: '昵称必须是2-10位的非空字符串', trigger: 'blur' }
        ],
        email: [
          { required: true, message: '请输入用户邮箱', trigger: 'blur' },
          //  type: 'email' 指校验邮箱格式
          { type: 'email', message: '邮箱格式不正确', trigger: 'blur' }

        ]
      }
    }
  },
  watch: {
    // 监听vuex中userInfo的变化
    // '$store.state.Lgin.userInfo' (newValue) {
    //   console.log('监听$store.state.Lgin.userInfo的变化：', newValue)
    // }

    '$store.state.Lgin.userInfo': {
      immediate: true, // 也面加载之后立即执行一次监听
      handler (newValue) {
        console.log('监听$store.state.Lgin.userInfo的变化：', newValue)
        this.userInfo = { ...newValue }
        // this.userInfo = newValue
        // newValue 和vuex 变量是有引用关系=》需要拷贝赋值
        // ...newValue  拷贝newValue 的值，阻断之间的联系
      }
    }

  },
  methods: {
    // 修改用户信息
    updateUser () {
      /**
       * 修改流程
       * 1、兜底校验
       * 2、校验通过后，发送请求修改
       * 3、因为vuex 存的还是没有修改之前的数据= 》需要更新下
       */
      this.$refs.fm.validate(async (isOk) => {
        if (isOk) {
          // 验证通过
          // this.userInfo 把要修改的最新用户信息传给后台
          await updateUserInfoApi(this.userInfo)
          // 提示框
          this.$message.success('修改成功')
          this.$store.dispatch('Lgin/getUserAction')
        }
      })
    },
    reset () {
      this.$refs.fm.resetFields()
    }
  }

}
</script>

<style lang="scss" scoped>
</style>
